package juc.completablefuture.methods.and;

/**
 * @ClassName ThenAcceptBothExample
 * @PackageName completablefuture.methods.and
 * @projectName myThread
 * @Description 
 * @Author games
 * @Date 2025/8/27 下午4:52
 * @Version 1.0
 */
import java.util.concurrent.CompletableFuture;

/**
 * thenAcceptBoth()
 * 作用：两个任务都执行完成后，把两个任务的结果作为参数，传递给一个Consumer。
 * 返回值：void。
 * 作用：两个任务执行完成后，将结果交给 BiConsumer 消耗，无返回值。
 * 返回值：void。
 */
public class ThenAcceptBothExample {
    /**
     * 主方法，演示CompletableFuture的thenAcceptBoth方法的使用
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        // 创建第一个异步任务，返回字符串"Hello"
        CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(() -> "Hello");
        // 创建第二个异步任务，返回字符串"World"
        CompletableFuture<String> cf2 = CompletableFuture.supplyAsync(() -> "World");

        // 使用thenAcceptBoth方法组合两个异步任务，当两个任务都完成后，执行指定的操作
        // 参数cf2是另一个CompletableFuture实例
        // 参数(s1, s2)是两个任务的返回结果
        // 打印组合后的结果: "Hello World"
        cf1.thenAcceptBoth(cf2, (s1, s2) -> System.out.println(s1 + " " + s2)); // 输出: Hello World
    }
}